package org.suk.dp;

import org.suk.dp.cook.GuangDongCook;
import org.suk.dp.cook.JiangsuCook;
import org.suk.dp.cook.ShandongCook;
import org.suk.dp.cook.SichuanCook;
import org.suk.dp.cuisine.GuangDongCuisine;
import org.suk.dp.cuisine.ICuisine;
import org.suk.dp.cuisine.JiangsuCuisine;
import org.suk.dp.cuisine.ShandongCuisine;
import org.suk.dp.cuisine.SichuanCuisine;

/**
 * @description: 测试
 *
这⾥可以主要观察 菜品 与 厨师 的组合； new GuangDoneCuisine(new GuangDongCook()); ，
每⼀个具体的命令都拥有⼀个对应的实现类，可以进⾏组合。
当菜品和具体的实现定义完成后，由⼩⼆进⾏操作点
单， xiaoEr.order(guangDoneCuisine); ，这⾥分别添加了四种菜品，给⼩⼆。
最后是下单，这个是具体命令实现的操作，相当于把⼩⼆⼿⾥的菜单传递给厨师。当然这⾥也可以
提供删除和撤销，也就是客户取消了⾃⼰的某个菜品。

 * @Date : 2020/12/28 5:31 PM
 * @Author : 石冬冬-Seig Heil
 */
public class Client {

    public static void main(String[] args) {
        // 菜系 + 厨师；⼴东（粤菜）、江苏（苏菜）、⼭东（鲁菜）、四川（川菜）
        ICuisine guangDoneCuisine = new GuangDongCuisine(new GuangDongCook());
        JiangsuCuisine jiangSuCuisine = new JiangsuCuisine(new JiangsuCook());
        ShandongCuisine shanDongCuisine = new ShandongCuisine(new ShandongCook());
        SichuanCuisine siChuanCuisine = new SichuanCuisine(new SichuanCook());
        // 点单
        Xiaoer xiaoEr = new Xiaoer();
        xiaoEr.order(guangDoneCuisine);
        xiaoEr.order(jiangSuCuisine);
        xiaoEr.order(shanDongCuisine);
        xiaoEr.order(siChuanCuisine);
        // 下单
        xiaoEr.placeOrder();
    }
}
